package com.ssy.lingxi.member.merchant.service.base;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.api.model.vo.inner.response.MemberCategoryFeignVO;
import com.ssy.lingxi.member.merchant.entity.MemberRelationDO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.AreaCodeVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.BusinessCategoryVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.MemberToClassifyDepositVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.response.MemberClassifyQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.response.MemberClassifyVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * 会员入库分类信息基础服务类
 * @author 万宁
 * @version 2.0.0
 * @date 2021-05-31
 */
public interface IBaseMemberClassificationService {

    /**
     * 保存会员入库信息
     *
     * @param relationDO      会员关系
     * @param code            会员编码
     * @param partnerType 会员合作类型枚举
     * @param maxAmount       合作金额
     * @param areaCodes       适用区域
     * @param categories      主营品类列表
     * @return 保存结果
     */
    Wrapper<Void> saveMemberClassification(MemberRelationDO relationDO, String remark, Integer currencyType, String code, Integer partnerType, BigDecimal maxAmount, List<AreaCodeVO> areaCodes, List<BusinessCategoryVO> categories);

    /**
     * 查询会员入库分类信息（不可编辑）
     * @param relationDO 会员关系
     * @return 查询结果
     */
    MemberClassifyVO getMemberClassification(MemberRelationDO relationDO);

    /**
     * 查询会员入库分类信息（可编辑）
     * @param relationDO 会员关系
     * @return 查询结果
     */
    MemberClassifyQueryVO findMemberClassification(MemberRelationDO relationDO);

    /**
     * 查询会员入库分类信息 - 主营品类信息
     * @param relationDO 会员关系
     * @return 查询结果
     */
    List<MemberCategoryFeignVO> findMemberBusinessCategories(MemberRelationDO relationDO);
}
